
;;; Helper function for the tail-recursive version of list-intersection.
;;; Argument A is the accumulator variable.

(defun list-intersection-aux (L1 L2 A)
  "Compute the union of A and the intersection of lists L1 and L2."
  (if (null L1) 
      A
    (if (member (first L1) L2)
	(list-intersection-aux (rest L1) L2 (cons (first L1) A))
      (list-intersection-aux (rest L1) L2 A))))

;;; Actual implementation of tail-recursive list-intersection

(defun fast-list-intersection (L1 L2)
  "Compute intersection of two lists L1 and L2 (tail-recursive version)."
  (list-intersection-aux L1 L2 nil))
